package com.gjy.scala.funtion

object Currying {
  def main(args: Array[String]): Unit = {
/*
    def add(x: Int, y: Int): Int = x + y
    println(add(2,3))
*/

    // 函数作为返回值返回

    def add1(x: Int): Int=>Int = {
      def add(y: Int): Int = x + y
      add
    }

    println(add1(2)(3))


    def add2(x: Int): Int=>Int = {
      (y: Int) => x + y
    }

    // 柯里化，允许逐步传递参数
    def add3(x: Int)(y:Int): Int = {
      x + y
    }

    println("柯里化后的结果："+add3(2)(3))

    // 柯里化的使用场景
    // 假设有个日志函数，需要传递不同的日志级别和日志信息
    def log(level: String)(message: String): Unit = {
      println(s"[$level] - $message")
    }

    log("info")("这是一个info级别的日志")
    log("error")("这是一个error级别的日志")

    val infoLog = log("info") _
    val errorLog = log("error") _


    infoLog("info message")
    errorLog("error message")
    // 普通函数
    println("============普通函数=============")
    def log1(level: String,message: String): Unit = {
      println(s"[$level] - $message")
    }
    log1("info","这是一个info级别的日志")
    log1("error","这是一个error级别的日志")

    log1("info","info message")
    log1("error","error message")
  }
}
